/*
 * main.c
 *
 *  Created on: 31/05/2011
 *      Author: fernando
 */

#include "avl.h"
#include "texto.h"
#include "operacoes.h"
#include "impressor.h"

#include <stdio.h>
#include <string.h>

/*main feito para fase de testes*/

int main() {
	No *arvore;
	char entrada[MAXPALAVRA], word[MAXPALAVRA];
	int num_mais, num_menos, verificaTexto, i, pont;
	NoTexto *consulta;
	ListaTexto *textos, *p;
	char palavrasMais[MAXPALAVRA][MAXPALAVRA], palavrasMenos[MAXPALAVRA][MAXPALAVRA];

	inicializa(&arvore);
	inicializaListaTexto(&textos);
	for(i = 0; i < MAXPALAVRA; i++) {
		palavrasMais[i][0] = '\0';
		palavrasMenos[i][0] = '\0';
	}

	do {
		scanf("%s", entrada);

		switch(entrada[0]) {
		case '+':
		case '-':
			num_mais = num_menos = 0;

			for(i = 0; i < strlen(entrada); ) {
				pont = i++;
				while(eLetra(entrada[i]) || entrada[i] == '\'') {
					if(entrada[i] == '\'')
						word[i - pont] = '\'';
					else
						word[i - pont] = minuscula(entrada[i]);
					i++;
				}
				word[0] = entrada[pont];
				word[i - pont] = '\0';

				if(strlen(word) > 0) {
					if(word[0] == '+')
						strcpy(palavrasMais[num_mais++], word+1);
					else if(word[0] == '-')
						strcpy(palavrasMenos[num_menos++], word+1);
				}
			}

			// consulta os textos
			if(num_mais > 0) {
				for(p = textos; p != NULL; p = p->prox) {
					for(i = 0; i < num_mais; i++)
						if(strstr(p->nome, palavrasMais[i]) != NULL)
							verificaTexto ++;
					for(i = 0; i < num_menos; i++)
						if(strstr(p->nome, palavrasMenos[i]) != NULL)
							verificaTexto = 0;

					if(verificaTexto == num_mais)
						printf("Arquivo: %s\n", p->nome);
				}
			}
			// consulta as linhas
			consulta = listaConsulta(num_mais, num_menos, palavrasMais, palavrasMenos, arvore);
			if(consulta != NULL)
				imprimeListaTextos(consulta);
			else
				printf("Nenhum resultado encontrado.\n");
			fflush(stdout);
			break;

		case '&':
			for(p = textos; p != NULL && strcmp(p->nome, entrada+1) != 0; p = p->prox);
			if(p == NULL) {
				carregaTexto(entrada+1, &arvore);
				insereListaTexto(entrada+1, &textos);
				printf("Insersão completa!\n");
			}
			else
				printf("Texto ja inserido.\n");
			fflush(stdout);
			break;

		case '>':
			for(p = textos; p != NULL && strcmp(p->nome, entrada+1) != 0; p->prox);
			if(p != NULL){
				imprimePalavras(arvore, entrada+1);
				printf("Indice criado!\n");
			}
			else
				printf("Texto ainda nao inserido. Nao foi possivel criar o indice.\n");

			fflush(stdout);
			break;
		}

	} while(entrada[0] != '#');
	return 0;
}
